package com.hui.platform.falseworkapi.common.core.exception;

import com.hui.platform.falseworkapi.common.core.I18nMessage;
import lombok.Getter;

/**
 * 基础异常类，所有自定义异常类都需要继承本类
 *
 * @author Peng
 * @date 2019/11/4
 */
public class BaseException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    /**
     * 消息接口
     */
    @Getter
    private I18nMessage i18nMessage;

    /**
     * 主要构造器
     * @param i18nMessage 国际化消息
     */
    public BaseException(I18nMessage i18nMessage) {
        super(i18nMessage.getMessage());
        this.i18nMessage = i18nMessage;
    }

    /**
     * 通过key值构造器（一般不建议使用）
     *
     * @param i18nKey 国际化消息的key
     * @param defaultMsg 国际化消息的默认值
     */
    @Deprecated
    public BaseException(String i18nKey, String defaultMsg) {
        super(defaultMsg);
        this.i18nMessage = new I18nMessage() {
            @Override
            public String getKey() {
                return i18nKey;
            }
            @Override
            public String getMessage() {
                return defaultMsg;
            }
        };
    }

    /**
     *  包装错误构造器 少用
     * @param i18nMessage 国际化消息
     * @param cause Throwable对象（造成该异常的上一级异常）
     */
    public BaseException(I18nMessage i18nMessage, Throwable cause) {
        super(i18nMessage.getMessage(), cause);
        this.i18nMessage = i18nMessage;
    }
}
